﻿'''
题目描述
给定一个字符串s，最多只能进行一次变换，返回变换后能得到的最小字符串（按照字典序进行比较）。
变换规则：交换字符串中任意两个不同位置的字符。
输入描述
一串小写字母组成的字符串s
备注
s是都是小写字符组成
1<=s.length<=1000
输出描述
一串小写字母组成的字符串s
示例1
输入
abcdef
输出
abcdef
说明
abcdef已经是最小字符串，不需要交换。
示例2
输入
bcdefa
输出
acdefb
说明
a和b进行位置交换，可以得到最小字符串。
解题思路
题目要求给定一个字符串s，通过最多进行一次字符交换，找到能够得到的按字典序排序最小的字符串。
题目的关键点：
只能进行一次变换（交换两个不同位置的字符），或者不变换。
目标是找到最小的可能字符串，即字典序最小。
字典序是按照字母顺序进行排列的顺序，例如"abc" < "acb"。在字典序中，前面的字符越小，整个字符串的字典序就越小。
思路分析：
首先，我们需要检查字符串当前是否已经是字典序最小的（即字符串已经是按字典序排好序的）。如果是，那么直接输出原字符串即可。
如果不是，我们需要找到如何通过交换两个字符使字符串变得更小。
代码解释
代码使用了贪心算法的思想。
核心在于：
逐字符比较：从字符串的最左边开始，逐字符比较原字符串与排序后的字符串，寻找第一个不匹配的字符。确保此位置的字符是尽可能
的最小值。
如果存在多个字典序最小的字符，则选择尽可能靠后的。
最小化的关键：
代码接下来通过逐字符比较原字符串和排序后的字符串：
当找到第一个不同的字符时，例如在"dcab"中，原字符串的第一个字符'd'与排序后字符串的第一个字符'a'不同。
这个差异表明，如果将原字符串中的'd'换成'a'，字典序会变得更小。
为什么第一次交换就足够（贪心）：
当我们找到第一个不同字符并进行交换后：
我们确保了字符串的第一个字符已经是可能的最小字符。
由于字典序的排列原则，最左边的字符影响最大。只要第一个字符已经是最小的，接下来的字符顺序无需再调整，因为再调整也不会
得到更小的字典序。
示例
假设输入字符串是 "bcaacd"：
排序后的字符串："aabccd"
逐字符比较
第一个字符 'b' 不匹配，候选字符为两个 'a'。
选择最优候选
查找并在两个 'a' 中选择靠后 的一个 'a' 进行交换，得到 "acabcd"。
'''
#输入描述：一串小写字母组成的字符串s
#输出描述：一串小写字母组成的字符串s
#读取输入并存储
s = input()
#对原字符串进行排序,无需转换为list
sorted_s = sorted(s)
#比较原字符串和排序后的字符串，如果相等说明已是最小字符串，无需变换
if sorted_s == s:
    print(s)
    exit()

#如果不相等，需要交换
#遍历原字符串，找到第一个与排序后不相等字符，并与原字符串中最后一个该字符交换
result = list(s)
for i in range(len(sorted_s)):
    if s[i] != sorted_s[i]:
        #tmp = s[i]  #存储原字符串需要交换的字符
        #swap_index = -1 #用来存储需要交换的索引位置
        #for j in range(i+1,len(sorted_s)):
        #    if s[j] == sorted_s[i]:
        #        swap_index = j
        swap_index = s.rindex(sorted_s[i])  #直接使用str.rindex()查找最右的索引
        #交换原字符串中字母,因只需交换一次，所以交换后需跳出循环，否则会一直交换到最小字典序
        result[i],result[swap_index] = result[swap_index],result[i]
        break
#输出
print(''.join(result))